Esse artigo  voltado para quem deseja ver o dosvox de dentro para fora.


Se voc deseja saber como programar para dosvox, o que o faz funcionar,
quais as peas que o compe,

ento esse artigo  para voc.


Nada de apostilas massantes, nem de textos longos.


Sempre que possvel, eu vou trazer textos no muito grandes, mostrando a
arte de escrever programas para essa to querida plataforma que  o
sistema dosvox.


Quem me acompanha, certamente j ouviu falar no curso de programao
para dosvox.


Mas eu sei que nem todos podem fazer, ou nem todos querem.


No, no estou aqui para vender nada, nem vou incomodar ningum pedindo
pelo amor de Deus para fazer o curso.


Esse trabalho  um presente meu para voc.

Tanto que essa  a nica vez que falarei dele, dentro dessa srie de textos.


 simples assim:

se o assunto te interessar, voc l os textos e pratica o que eu mostro
nele.

Se isso mexer com voc, ou se voc quiser ainda mais, voc me contacta
em privado e pea o curso.

E o que  o "mais"?


Acompanhamento a todo tempo, por whatsapp ou email, para voc tirar suas
dvidas.

Exerccios prticos de scripvox, um pouco de pascal para dosvox e troca
de ideias sobre coisas que voc no vai ver na

sua aula de informtica.

No, no  autovalorizao.

 muito provvel que voc se surpreenda com o que voc pode fazer com
seu dosvox, ainda que ele tenha diversas limitaes.


E diferente do que costumam fazer por a, comigo voc decora muito pouco
e aprende bem mais do que decora.


Pergunta pra quem fez o curso comigo, quantas vezes eu dizia: "No me
lembro bem o atalho" ou... "a linha  quase essa"...

Uma hora dessas, voc deve estar pensando:

"u, ento voc no ensina nada"?

Sim.

S que ao envs de formar apertadores de boto e decoradores de atalhos 
e cdigos, procuro a ensinar o como , como funciona, para que serve, 
onde fica, como se chega l, como se constri, como se modifica...

Percebeu?

Atalhos a gente anota para consulta quando precisar. Com o tempo, eles 
vo ficar gravados na sua mente.

Agora, conceitos, se tivermos algum que nos ajude a entend-los, e se 
tiversmos compromisso e dedicao no aprendisado, decorebas sero cada 
vez menos necessrias e, certamente, samos na frente de uma poro de 
gente que no sabe sequer o boto que acabou de apertar.


Bom... dito isso tudo a, chega de lerolero e vamos ao texto de hoje!

*


[0] ndice
1. Um pouco de histria;
2. Instalando o delphi
3. escrevendo e compilando meu primeiro programa para dosvox
4. Variveis;
4.1 Declarando uma varivel;
4.2 Tipos de variveis;
5. Obtendo valores digitados pelo usurio;
5.1 SintRead e Sintreadln;
5.2 Read e readln;
5.3 Sintreadint;

[1] Um pouco de histria;
Desde suas verses iniciais, o dosvox era escrito em pascal.
Antes, era compilado com um compilador chamado turbo pascal.
Depois, veio o windows 95, e com ele, muitos avanos, que o dosvox no 
conseguia
acompanhar.
Como nessa poca, mesmo tendo windows, a instalao do ms dos era 
obrigatria,
o dosvox no deixava de funcionar, porm, s funcionava no ms dos.

Mais tarde, veio o windows 98.
O ms dos ainda se fazia presente, mas j estava com seus dias contados.
Foi a que surgiu o primeiro dosvox para windows.

Mas como continuar escrevendo o sistema em pascal, se o pascal rodava 
apenas em
ms dos?

  A borland, empresa que produzia o compilador borland pascal, lanou 
na poca
da chegada do windows, uma ide chamada delphi.

O delphi inclua um ambiente de edio de cdigo, um depurador e um 
compilador,
alm de mais uma srie de acessrios, como por exemplo, vrios componentes
grficos para colocar nos programas, como botes, caixas de dilogo, tudo
j pronto, era apenas arrastar para a janela e depois editar o cdigo para
aquele componente.

A linguagem usada no ambiente delphi era o object pascal, que nada mais era
do que o antigo pascal com orientao a objetos.

Mas isso, mesmo sendo algo muito poderoso, ainda mais para aquela poca 
(1995),
no se encaixava bem para o dosvox.

foi criada ento uma biblioteca que simulava o ambiente do antigo pascal,
trazendo de volta todas as funes e procedimentos do pascal, que j era 
usado
no dosvox, para dentro do delphi.
E assim, foi possvel reescrever o dosvox para windows, mudando 
praticamente nada
no cdigo dos utilitrios.
Essa biblioteca chama-se dvcrt, e est no dosvox at hoje.

Ento, podemos dizer que, hoje em dia, o dosvox  escrito em pascal e 
compilado
com delphi 6 ou delphi7.


[2] Instalando o delphi;

Para ter o delphi em sua mquina, pronto para compilar programas para o 
ambiente dosvox,
siga estes passos:
1. Baixe o delphi porttil deste endereo:
http://www.sanfersite.com.br/testes/delphi6_portatil.rar

2. Descompacte o pacote rar em qualquer local de sua mquina, sugerimos 
a raz
do disco c (c:\)
  Pronto, voc j tem o delphi e pode compilar seus programas para 
dosvox!

[3] Escrevendo e compilando meu primeiro programa para dosvox

Antes de comear, recomendamos que voc crie uma pasta para seu projeto.
Isso vai te ajudar a se organizar, pois assim, todos os arquivos 
pertencentes
ao seu projeto ficam num lugar separado para eles.

Criada a pasta, vamos comear.
Abra seu edivox e crie um arquivo chamado olamundo.dpr

Digite o cdigo abaixo:
program olamundo;
uses dvcrt, dvwin;

begin
  sintinic (0, '');
  sintWriteln ('Ol mundo!');
  sintWriteln ('Este  meu primeiro programa em pascal para dosvox!');
sintfim;
end.

O programa acima escreve na tela as mensagens:
Ol mundo!
Este  meu primeiro programa em pascal para dosvox!

Vamos ver linha a linha do cdigo:

Na primeira linha temos:
program olamundo;
Todo programa em pascal comea com a palavra program, um espao, seguido 
de um
nome para seu programa e finalizando a linha com ponto e vrgula (;)

O nome do programa no pode conter espaos nem acentos.
Tambm no pode conter smbolos especiais a no ser o sublinhado.

Toda instruo em pascal deve, obrigatoriamente, terminar com ponto e 
vrgula.
No h distino entre maisculas e minsculas, como existe na linguagem 
c por exemplo.
Na prxima linha:
uses dvcrt, dvwin;

A clusula uses serve para que possamos incluir units em nosso programa.
Podemos pensar nas units como um pacote de funes prontas para serem usadas
nos programas.
Aqui estamos incluindo duas units:
Dvcrt, que  uma unit do dosvox.
Ela  uma das units mais importantes num programa para dosvox, pois  nela
que esto as funes que emulam o antigo ambiente pascal.
Dvwin: outra unit importantssima do dosvox.
Nela contm praticamente todas as funes de voz do sistema.
Funes de baixo nvel para o sintetizador nativo, soletrao, campo de 
edio
falado, etc... esto na dvwin.

Continuando:
begin

Costumamos pensar num programa em pascal dividido em 3 partes:
1. Cabealho. Onde colocamos o nome do programa e as units usadas.
2. Declarao de variveis (aqui no declaramos nenhuma)

3. Corpo do programa, que  o que est comeando agora.
Todas as instrues iniciam aps a palavra begin (incio em ingls), e 
so enserradas com a palavra end, (fim em ingls),
seguida de um ponto final.

Prossigamos:
  sintinic (0, '');
  Sintinic  uma funo especial do dosvox
que se encontra na unit dvwin.
O que ela faz  inicializar o sintetizador e o banco de voz do sistema.
Sem usar o sintinic antes de qualquer outra funo de fala, nada vai 
funcionar.
Da, ou seu programa vai quebrar, ou vai ficar mudo.
A funo sintinic recebe dois parmetros:
Um do tipo inteiro, que significa em que velocidade deve iniciar a fala.
0 significa que deve usar a velocidade configurada no sistema.
E outro do tipo string, que corresponde ao nome da pasta em que o 
programa deve iniciar.
Se vazio (''), inicia na pasta corrente.
Nesse caso, ns dizemos que o programa deve iniciar na velocidade 
configurada no sistema e no diretrio corrente.

Vamos para as duas linhas seguintes:
  sintWriteln ('Ol mundo!');
  sintWriteln ('Este  meu primeiro programa em pascal para dosvox!');
sintWriteln  um procedimento especial do dosvox localizado na unit dvwin.
O que ele faz  escrever uma mensagem na tela, ecoando a mesma.
Na tela, aps escrever a mensagem, o cursor muda para a prxima linha.
O nome sintWriteln vem da instruo Writeln do pascal.
A instruo writeln escreve uma string na tela e muda o cursor para a 
prxima
linha.
A writeln vem da funo write (escrever em ingls), sendo que a funo write
no muda de linha depois de escrever.
As letras l e n ao fim da palavra write significa line new (nova linha), da
ento o nome writeln.

No dosvox, tambm temos, no mesmo esquema, a funo sintwriteln, que 
pula de linha
aps escrever, e a sintwrite, que no pula de linha.

Se quisermos escrever algo sem ecoar no dosvox, podemos usar as funes 
write
e writeln.
Voltando ao nosso programa temos:
sintfim;
Isso serve para enserrar o que foi iniciado com sintinic, no incio do 
programa.
end.
Fim do programa.

Agora, vamos salvar e compilar nosso projeto.

A compilao pode ser feita tanto digitando tudo a mo, quanto usando um 
arquivo
chamado compila.bat.
Este arquivo vem no pacote do delphi porttil, na pasta delphi6.
Para facilitar, v na pasta c:\delphi6 e copie o arquivo compila.bat 
para a pasta
do seu projeto.
Agora, v na opo p do dosvox e escreva o seguinte:
compila olamundo

Ele ficar em silncio por alguns instantes e depois aparecer
o edivox, com uma srie de mensagens.

V diretamente na ltima linha e verifique se tem algo como isto:
12124 lines, 0.58 seconds, 440880 bytes code, 350677 bytes data.

se tem algo parecido com isso, parabns, voc compilou seu primeiro 
programa!
Se no, verifique seu cdigo e tente novamente.

As possibilidade de erro so muitas.
Saber depurar e acertar o que est errado  uma questo de prtica e 
pacincia.
Uma noo de ingls vai ajudar, j que todas as mensagens do compilador 
e as instrues so nesse idioma.

Agora, se tudo deu certo, feche a janela do edivox com a tecla esc e procure
pelo arquivo olamundo.exe

Execute-o e veja se voc ouve a mensagem:
Ol mundo!
Este  meu primeiro programa em pascal para dosvox!

Se ouviu, parabns, voc conseguiu!
Se no ouviu, no desanime, vejamos o que est errado e tentemos novamente!

[4] Variveis
  O que  uma varivel?
  Na informtica, uma varivel  um nome associado a um endereo de
memria.
  Os endereos de memria so formados por nmeros enormes, geralmente
representados em hexadecimal para facilitar na leitura.

  Os endereos guardam informaes, que podem ser manipuladas a medida
que for necessrio.
  Se estiver achando complicado tudo isso, continue lendo, tudo ser

exclarecido aos poucos.
  Afim de ilustrar o que estamos explicando, vamos imaginar a seguinte
situao:
  Imagine que voc queira consultar o endereo de memria
1a0cfdbabacbac

  Complicado manipular algo assim, no acha?
  Para isso existem as variveis.
Para facilitar na manipulao das informaes armazenadas nos endereos
de memria.
Quer ver?
Imagine que o endereo acima tenha um nome associado a ele, como por
exemplo
nomedoaluno?
ou soma?
ou dia?
ou nomedomeuamigo?
  Facilitou, no acha?

[4.1] Declarando uma varivel.
No pascal, a declarao de variveis funciona assim:
escreva a palavra reservada var, depois um espao, ou mesmo em outra
linha, nome da varivel, depois sinal
de dois pontos e o tipo da varivel.
E, claro, terminando a linha com ponto e vrgula.
Depois disso,
siga colocando o nome da varivel, dois pontos e tipo.
As variveis podem conter qualquer nome, desde que no tenham acentos ou 
smbolos
especiais nem iniciem com nmero.
Outra forma de declarar variveis  assim:
var var1, var2, var3, var4... : tipo;
onde var1, var2, var3... seriam os nomes das variveis que desejamos 
declarar
e o tipo aps os dois pontos, seria o tipo de todas essas variveis que 
separamos por vrgula.

Diferente do scripvox, no pascal,  obrigatrio que declaremos todas as 
variveis que sero usadas durante o programa.
Elas devem ser declaradas logo no incio, antes de iniciarmos o corpo do 
programa e aps a instruo program.

[4.2] Tipos de variveis;
Enquanto em scripvox tnhamos apenas um nico tipo de varivel, em pascal,
temos diferentes tipos.

Vamos conhecer aqui os mais usados:
. tipo string:
Serve para guardarmos caracteres alfanumricos, isso , letras, nmeros 
e smbolos.
.Tipo integer: serve para guardarmos nmeros inteiros.
Por exemplo: 34, 58, 549,
1234, 5499...

[5] Obtendo valores digitados pelo usurio;
[5.1] Sintread e sintreadln;
So comandos que servem para obter uma string digitada pelo usurio.
A diferena  que sintread l do teclado mas no muda o cursor para a 
prxima linha,
mas sintreadln sim.
Ambas reproduzem a digitao do usurio.
O tipo da varivel que vai receber os dados deve ser string.
Acompanhe o exemplo e entenda como usar.

program pegateclado;
uses dvcrt, dvwin;
var nome : string;

begin
sintinic (0, '');
sintwriteln ('Ol, qual seu nome?');
sintreadln(nome);
sintfim;
end.

Nesse exemplo, declaramos inicialmente a varivel chamada nome, do tipo 
string.
Isso est na linha onde se l:
var nome : string;
Depois, no corpo do programa, guardamos nela o que o usurio digitou.
Isso foi feito na linha onde encontramos:
sintreadln(nome);
A varivel nome ento passou a ter o contedo digitado pelo usurio.

Mas, e se agora quisssemos exibir o que o usurio digitou?
Veja abaixo como ficaria:

program pegateclado;
uses dvcrt, dvwin;
var nome : string;

begin
sintinic (0, '');
sintwriteln ('Ol, qual seu nome?');
sintreadln(nome);
Sintwriteln ('Muito prazer, '+nome+'! Pascal no  to difcil assim!');

sintfim;
end.

Atente para a ltima instruo sintwriteln:
Sintwriteln ('Muito prazer, '+nome+'! Pascal no  to difcil assim!');
Primeiramente, abrimos parnteses e abrimos as aspas simples.
Colocamos a frase 'muito prazer '
aps isso, um sinal de mais, o nome de uma varivel, outro sinal de mais e
novamente, abrimos aspas simples.

Sem complicar muito, o que fizemos foi escrever uma frase na tela, 
juntar com o contedo de uma varivel e no fim,
completar com outra frase.

Imagine que a varivel nome contm o valor Joo.
O resultado ento seria:
Muito prazer, Joo! Pascal no  to difcil assim.

[5.2] Read e readln;
  Funciona igual sintread e sintreadln,
com a diferena que read e readln no fala quando se digita.

[5.3] Sintreadint;
Faz o mesmo que sintread ou sintreadln, mas a varivel que vai receber o 
contedo
deve ser do tipo inteiro e o contedo passado deve ser inteiro.
Exemplo:
program pegainteiro;
uses dvcrt, dvwin;
var i : integer;

begin
sintinic (0, '');
sintwriteln ('Por favor, digite um nmero:');
sintreadint(i);
sintfim;
end.

Para exibir esse nmero depois, podemos usar a funo sintwriteint.
 o mesmo que a sintwriteln para strings, mas esta  especial para 
escrever nmeros inteiros.
Veja:
program pegainteiro;
uses dvcrt, dvwin;
var i : integer;

begin
sintinic (0, '');
sintwriteln ('Por favor, digite um nmero:');
sintreadint(i);
sintwrite ('Voc digitou o nmero ');
sintwriteint(i);
sintfim;
end.

Caso eu digitasse o nmero 10, o resultado seria:
Voc digitou o nmero 10.
*
